home *** CD-ROM | disk | FTP | other *** search
- (* ------------------------------------------------------------------------
- :Program. WriteMessage
- :Contents. writes a new message to UMS' messagebase
- :Author. Kai Bolay [kai]
- :Address. Snail Mail: EMail:
- :Address. Hoffmannstraße 168 UUCP: kai@amokle.stgt.sub.org
- :Address. D-71229 Leonberg FIDO: 2:2407/106.3
- :History. v1.0 [kai] 25-Mar-93 (added Martin's suggestion)
- :History. v1.1 [kai] 31-Mar-93 (added new tags, toAddr only if private)
- :History. v1.2 [kai] 15-Apr-93 (added SERVER keyword, better Login() failure)
- :History. v1.3 [kai] 22-Sep-93 (updated for V40 Intefaces)
- :Copyright. Public Domain
- :Language. Oberon
- :Translator. AMIGA OBERON v3.01d
- :Imports. ums
- :Bugs. Does not create links (crosspostings, carbon copies)
- ------------------------------------------------------------------------ *)
- MODULE WriteMessage;
-
- IMPORT
- ums,
- I: Intuition, d: Dos, e: Exec, u: Utility,
- NoGuru, Break,
- y: SYSTEM;
- CONST
- Template = "USER/A,PASSWORD/A,SERVER/K\o$VER: WriteMessage 1.3 (22.9.93)\n\r";
- Msg = "This is an automatically created message because I'm too lazy to write\n"
- "a complete newsreader.\n"
- "\n"
- "If you improve this program in order to enable the user to write real\n"
- "messages please let me know.\n"
- "\n"
- " Bye, Kai\n"
- "\n"
- "-- \n"
- "This is no signature :-)\n";
- VAR
- RD: d.RDArgsPtr;
- Args: STRUCT (dummy: d.ArgsStruct)
- name: e.STRPTR;
- password: e.STRPTR;
- server: e.STRPTR;
- END;
- acc: LONGINT;
- Fields: ums.MsgTextFields;
- i: INTEGER;
- num: LONGINT;
-
- (* $Debug- *)
- PROCEDURE CheckErr;
- VAR
- err: INTEGER;
- txt: ums.STRPTR;
- BEGIN
- err := ums.ErrNum (acc);
- IF err # ums.ok THEN
- txt := ums.ErrTxt (acc);
- d.PrintF ("UMS-error: %ld, \"%s\"\n", err, txt);
- HALT (20);
- END;
- END CheckErr;
- (* $Debug= *)
-
- PROCEDURE GetString (Prompt: ARRAY OF CHAR): ums.STRPTR;
- CONST
- MaxChars = 256;
- VAR
- buffer: ums.STRPTR;
- i: INTEGER;
- BEGIN
- IF d.FPuts (d.Output(), Prompt) AND d.Flush (d.Output()) THEN END;
- buffer := e.AllocVec (MaxChars, LONGSET {e.memClear});
- IF buffer # NIL THEN
- IF d.FGets (d.Input(), buffer^, MaxChars-1) = NIL THEN END;
- i := 0;
- REPEAT
- IF buffer[i] = '\n' THEN buffer[i] := 0X END;
- INC (i);
- UNTIL buffer[i] = 0X;
- IF buffer[0] = 0X THEN
- e.FreeVec (buffer); buffer := NIL;
- END;
- END;
- RETURN buffer;
- END GetString;
-
- BEGIN
- i := 0;
- REPEAT
- Fields[i] := NIL;
- INC (i);
- UNTIL i = ums.NumFields;
-
- RD := d.ReadArgs (Template, Args, NIL);
- IF RD = NIL THEN
- d.PrintF ("Usage: %s\n", y.ADR (Template));
- HALT (20);
- END;
-
- (* $OddChk- $NilChk- *)
- acc := ums.UMSRLogin (Args.server^, Args.name^, Args.password^);
- (* $OddChk= $NilChk= *)
- IF acc <= 0 THEN
- d.PrintF ("Unable to login\n");
- HALT (20);
- END;
-
- Fields[ums.group] := GetString ("Group (<RETURN> for private mail): ");
- IF Fields[ums.group] # NIL THEN
- Fields[ums.replyGroup] := GetString ("Reply Group: ");
- END;
- Fields[ums.replyName] := GetString ("Reply Name: ");
- IF Fields[ums.replyName] # NIL THEN
- Fields[ums.replyAddr] := GetString ("Reply Addr: ");
- END;
- Fields[ums.toName] := GetString ("To Name: ");
- IF Fields[ums.group] = NIL THEN
- Fields[ums.toAddr] := GetString ("To Addr: ");
- END;
- Fields[ums.refID] := GetString ("Refer-ID: ");
- Fields[ums.subject] := GetString ("Subject: ");
- Fields[ums.attributes] := GetString ("Attributes: ");
- Fields[ums.organization] := GetString ("Organization: ");
- Fields[ums.distribution] := GetString ("Distribution: ");
- Fields[ums.newsreader] := y.ADR ("WriteMessage 1.2");
- Fields[ums.msgText] := y.ADR (Msg);
-
- (* write the message *)
- num := ums.WriteUMSMsgTags (acc, ums.tagTextFields, y.ADR (Fields),
- u.done);
- CheckErr;
- d.PrintF ("Your message got number %ld.\n", num);
- CLOSE
- IF acc # NIL THEN
- ums.Logout (acc); acc := 0;
- END;
- IF RD # NIL THEN
- d.FreeArgs (RD); RD := NIL;
- END;
- Fields[ums.newsreader] := NIL; (* not allocated by AllocVec() !! *)
- Fields[ums.msgText] := NIL; (* not allocated by AllocVec() !! *)
- i := 0;
- REPEAT
- IF Fields[i] # NIL THEN
- e.FreeVec (Fields[i]); Fields[i] := NIL;
- END;
- INC (i);
- UNTIL i = ums.NumFields;
- END WriteMessage.
-